以前,自己都是通过把笔记、容易忘和经常需要用的知识都记录在自己本地的文件里面。既然有了博客,这两天刚好整理一下原来的笔记,把现在还认为不错的分享到博客上。来第一篇先分享一下常见的apply和call方法。
在说apply和call之前,首先你必须要知道javascript中的上下文环境:(PS:不懂的童鞋可以自行百度,下回在原型与闭包的分享中也会做比较详细的说明)。这里先说两点:
一、javascript中的this关键字指向的是包含当前方法的那个对象;
二、而在面向对象的javascript编程中,this指向的就是由某个”类”创建的一个对象实例。
apply和call方法的主要两个功能
一、在需要改变调用函数this的时候,或者调用本身对象没有的方法的时候:当调用其他对象而非代表当前上下文的对象的方法时,该方法中所有对this的引用都指向此方法所在的对象,而非当前代码的执行的上下文——就是说在调用这个方法时,你切换到了另外一个上下文中。在调用其他对象的方法时,我们利用apply和call方法保持this原来的值。
二、javascript继承。
apply和call的区别
call和apply的区别在于,使用apply时,所有参数都应放在一个单独的数组参数中,而在使用call的时候,参数应该一次列出,并用逗号隔开。
例:使用apply和call方法调用别的对象方法
1 | //定义一个简单的"类" |
例:改变上下文环境
1 | //如果单纯只是在一个函数中调用另一个函数是没什么多大区别,apply / call 的最大作用就是改变上下文 |
例:继承
1 | function base() { |